home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / sys / koadd.lzh / patch / _start.c < prev   
C/C++ Source or Header  |  1994-11-30  |  926b  |  54 lines

  1. #include    <sys_doslib.h>
  2.  
  3. extern void    *_PSP,
  4.         *_PSTA,
  5.         *_DSTA,
  6.         *_BSTA;
  7.         *_SSTA;
  8.         *_HSTA;
  9.         *_HEND;
  10. extern int    argc;
  11. extern char    **_argv;
  12.  
  13. void
  14. _start( pp )
  15. struct PDBADR    *pp;
  16. {
  17.     int    ac;
  18.  
  19.     _PSP=    pp;
  20.     _PSTA=    (char*)(pp+256-16);
  21.     _DSTA=    pp->heap;
  22.     _BSTA=    pp->bss;
  23.  
  24.     {
  25.         int    i;
  26.         char    **av,
  27.             *s= pp->stack,
  28.             *p= pp->cmdline+1;
  29.         for( ac= 0 ; *p ; ac++ ){
  30.             for(; *p && *p <= ' ' ; p++ );
  31.             for(; *p > ' ' ; *s++= *p++ );
  32.             *s= '\0';
  33.         }
  34.         _argv= av= (void*)((int)s+3)&0xfffffffc;
  35.         *av++= pp->exe_name;
  36.         for( p= pp->stack, i= 0 ; i< ac ; i++ ){
  37.             for( *av++= p ; *p++ ;);
  38.         }
  39.         *av++= 0;
  40.         _argc= ac+1;
  41.  
  42.         _HSTA= _HEND=
  43.             (_SSTA= (void*)((int)av+3)&0xfffffffc) + STACKSIZE;
  44.     }
  45.     asm volatile ("move.l %0,sp" : /* no outputs */ : "g" (_hsta));
  46.  
  47.     if( SETBLOCK( pp, (int)_HEND - (int)pp ) < 0 )
  48.         EXIT2( 0 );
  49.  
  50.     _vectormove ();
  51.  
  52.     exit (main (_argc, _argv, _envp));
  53. }
  54.